package io.mft.commons.db.mapper.builder;

import java.lang.reflect.Method;

import io.mft.commons.db.mapper.DatasourceWraper;
import io.mft.commons.db.mapper.cache.ArgMetadata;
import io.mft.commons.db.mapper.cache.MapperMetadataCache;
import io.mft.commons.db.mapper.cache.ParameterMetadataWrapper;
import io.mft.commons.db.mapper.dbmethod.DbMapperParameter;

public class ParameterBuilder {
	/**
	 * 构造参数
	 * @方法名称: buildParameter
	 * @参数 @param method
	 * @参数 @param args
	 * @参数 @return
	 * @说明: TODO
	 * @返回类型 DataRow    
	 * @创建者: 胡常建  
	 * @创建时间: 2018年3月9日 上午10:48:53
	 * @修改者: 胡常建  
	 * @修改时间: 2018年3月9日 上午10:48:53
	 */
	public static ParameterWrapper buildParameter(Method method,Object[] args) {
		ParameterMetadataWrapper parameterMetadataWrapper=MapperMetadataCache.getInstance().getParameterMetadataWrapper(method.getDeclaringClass(), method);
		ParameterWrapper parameter=new ParameterWrapper();
		parameter.setParameterMetadataWrapper(parameterMetadataWrapper);
		TbDIUWraper tbDIUWraper=new TbDIUWraper(parameterMetadataWrapper.getTbDIUWraper());
		if (args!=null) {
			int len=args.length;
			for (int i = 0; i < len; i++) {
				 if (args[i] instanceof DatasourceWraper) {
					 parameter.setDatasourceWraper((DatasourceWraper)args[i]);
				 }
				 else {
					 ArgMetadata argMetadata=parameterMetadataWrapper.getArgs().get(i);
					 if (argMetadata.getParamAnnotation()==null) {
						continue;
					 }
					 parameter.getParameter().set(argMetadata.getKey(), args[i]);
					 DbMapperParameter t=new DbMapperParameter(argMetadata);
					 t.setValue(args[i]);
					 parameter.getMapperParams().add(t);
					 tbDIUWraper.getBaseMapperParams().add(t);
				}
			}
		}
		parameter.setTbDIUWraper(tbDIUWraper);
		parameter.setArgs(args);
		return parameter;
	}
}
